home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1996 September / JCSM Shareware Collection (JCS Distribution) (September 1996).ISO / gameothr / wordy411.zip / BINGO.C < prev    next >
C/C++ Source or Header  |  1995-12-19  |  7KB  |  256 lines

  1. /**************************************************************************/
  2. /*                               Bingo Utility                            */
  3. /*                                                                        */
  4. /*                                 M\Cooper                               */
  5. /*                          3425 Chestnut Ridge Rd.                       */
  6. /*                        Grantsville, MD 21536-9801                      */
  7. /*                        --------------------------                      */
  8. /*                        Email:  thegrendel@aol.com                      */
  9. /*                                                                        */
  10. /*                $2.00 to register the entire WORDY package              */
  11. /*                                                                        */
  12. /**************************************************************************/
  13.  
  14.  
  15. #include <conio.h>
  16. #include "srch.h"
  17.  
  18.  
  19. #define FILE_OPENING_ERROR 3
  20. #define FILENAME_MAXLEN 8
  21. #define CR "\n"
  22. #define FILE_SUFFIX ".bgo"
  23. #define MAXLEN 30
  24. #define LINE_LEN 80
  25. #define NOARGS 1
  26. #define FILEARGS 3
  27. #define INCREMENT 1
  28. #define SPACE ' '
  29. #define XOUT '@'
  30. #define WILDCARD '?'
  31. #define FILLCHAR '_'
  32. #define BINGO 7
  33. #define BUFFERSIZE 8192
  34.  
  35. char ad[] =
  36. "BINGO utility by M\\Cooper, 3425 Chestnut Ridge Rd., Grantsville, MD 21536-9801";
  37.  
  38.  
  39. void getword( char *lset, char *file_name );
  40. void center( char *strng );
  41.  
  42. typedef enum { FALSE, TRUE } Boolean;
  43.  
  44. void main( int argc, char **argv )
  45. {
  46.  
  47.    char letterset[ MAXLEN ],
  48.         filename [ MAXLEN ];
  49.  
  50.      if( argc == NOARGS )
  51.         {
  52.         clrscr();
  53.         puts("Enter a LETTERSET to test ... ");
  54.         gets( letterset );
  55.         }
  56.      else
  57.         strcpy( letterset, *( argv + 1 ) );
  58.  
  59.      if( argc == FILEARGS ) 
  60.          strcpy( filename, *( argv + 2 ) );
  61.      else
  62.          strcpy( filename, "word.lst" );
  63.  
  64.      getword( letterset, filename );
  65. }
  66.  
  67.  
  68.  
  69. /**********************************WORDTEST********************************/
  70. /*       Function tests if word is constructible from Letterset           */
  71. /*                 Args in: char *letterset, char *word                   */
  72. /*   Returns: error_flag == TRUE (1) if constructible, FALSE (0) if not   */
  73. /**************************************************************************/
  74.  
  75. Boolean wordtest( char *letterset, char *word )
  76. {
  77.     Boolean error_flag = TRUE;
  78.     static char dup_lset[ MAXLEN ];
  79.     register char *letpos;
  80.  
  81.      strcpy( dup_lset, letterset );
  82.          
  83.         while( *word )
  84.             {
  85.             if( ( letpos  = strchr( dup_lset, *word++ ) ) != NULL )
  86.                 *letpos = XOUT;     //As long as letter contained...
  87.       else
  88.          if( ( letpos = strchr( dup_lset, WILDCARD ) ) != NULL ) 
  89.             *letpos = XOUT;  //Or wildcard character...
  90.  
  91.             else
  92.                 { error_flag = FALSE; break; } //test fails (not contained)
  93.             }
  94.  
  95.         return( error_flag );
  96. }
  97.  
  98. /*************************************************************/
  99. void getword( char *letter_set, char *file_name )
  100. {
  101.  
  102.     char    l_set [ MAXLEN ],
  103.         word [ MAXLEN ],
  104.         tempstr [ MAXLEN + 1 ],
  105.         targetfile [ MAXLEN ],
  106.         bar [ LINE_LEN + 1 ],
  107.         double_bar [ LINE_LEN + 1 ],
  108.    Bnum [ BINGO + 2 ],
  109.    *ppos;
  110.  
  111.     FILE *fptr,
  112.         *tfile;
  113.     int fnamelen,
  114.      i;
  115.     long wcount = 0L;
  116.  
  117.        memset( bar, '-', LINE_LEN );
  118.        *( bar + LINE_LEN ) = NULL;
  119.        memset( double_bar, '=', LINE_LEN );
  120.        *( double_bar + LINE_LEN ) = NULL;
  121.  
  122.        /*************opening credits*************/
  123.        clrscr();
  124.        printf( double_bar );
  125.        strcpy( tempstr, ad );
  126.        center ( tempstr );
  127.        printf( tempstr );
  128.     printf( " " );  //Pad out line.
  129.        printf( double_bar );
  130.        printf( CR );
  131.        /****************************************/
  132.  
  133.  
  134.        strcpy ( l_set, letter_set );
  135.        strcat ( letter_set, CR );
  136.  
  137.        /*   Create name of file to store derived words in   */
  138.        /*********************************************************/
  139.        fnamelen = strlen( l_set );
  140.        if( fnamelen  > FILENAME_MAXLEN )
  141.           fnamelen = FILENAME_MAXLEN;
  142.        strncpy( targetfile, l_set, fnamelen );
  143.        *( targetfile + fnamelen ) = NULL;
  144.        //NULL-terminate string, so strcat works, ha, ha.
  145.  
  146.       for( i = 0; i < fnamelen; i++ )
  147.          if( *( targetfile + i ) == WILDCARD )
  148.              *( targetfile + i ) = FILLCHAR;
  149.  
  150.  
  151. //    if( ( ppos = strchr( targetfile, '?' ) ) != NULL ) 
  152. //          *ppos = '0';
  153. //           strcpy( targetfile, "wildcard" );
  154.  
  155. //    ppos = targetfile;
  156. //    while( *ppos != NULL )
  157. //       if( *ppos == '?' )
  158. //          {
  159. //          *ppos = FILLCHAR;
  160. //          ppos++;
  161. //          printf( "\7\7\7\7" );  /******DEBUG******/
  162. //          }
  163.  
  164.        strcat( targetfile, FILE_SUFFIX );
  165.        /*********************************************************/
  166.  
  167.        if( !( fptr = fopen( file_name, "rt" ) ) )
  168.          {
  169.          printf( "\7\7\7Cannot open Wordfile: %s!", file_name );
  170.          exit( FILE_OPENING_ERROR );
  171.          }
  172.       if( setvbuf( fptr, NULL, _IOFBF, 2 * BUFFERSIZE ) )
  173.          exit( FILE_OPENING_ERROR );
  174.  
  175.        if( !( tfile = fopen( targetfile, "wt" ) ) )
  176.          {
  177.          printf( "\7\7\7Cannot open file to save words in!" );
  178.          exit ( FILE_OPENING_ERROR + 2 );
  179.          }
  180.       if( setvbuf( tfile, NULL, _IOFBF, BUFFERSIZE ) )
  181.          exit( FILE_OPENING_ERROR );
  182.  
  183.        /**************'Wait' Message***************/
  184.        printf( CR CR );
  185.        printf( "WORKING...\n\n" );
  186.        printf( "This will take a few seconds...\n" );
  187.        printf( "Please be patient.\n\n" );
  188.        printf( "Now searching 100,000+ word file and writing file of valid bingos.\n\n" );
  189.        /********************************************/
  190.  
  191.  
  192.  
  193.  
  194.  
  195.        sprintf( tempstr, "Bingo(s) created from: %s\n", strupr( l_set ) );
  196.        center( tempstr );
  197.        fprintf( tfile, double_bar );
  198.       fprintf( tfile, CR );
  199.        fprintf( tfile, tempstr );
  200.        fprintf( tfile, double_bar );
  201.        fprintf( tfile, CR );
  202.  
  203.  
  204.          /*********************Main Loop*************/     
  205.           while( fgets( word, MAXLEN, fptr ) != NULL )
  206.  
  207.             if( wordtest( letter_set, word ) && strlen( word ) >= BINGO + 1 ) // >7
  208.                {
  209.                fprintf( tfile, "%s", word );
  210.                wcount++;
  211.                }
  212.           /*******************************************/
  213.  
  214.       if( wcount == INCREMENT )
  215.          strcpy( Bnum, "Bingo" );
  216.       else
  217.          strcpy( Bnum, "Bingos" );
  218.  
  219.           fprintf( tfile, bar );
  220.       fprintf( tfile, CR );
  221.           sprintf( tempstr, "%ld %s can be constructed from %s.",
  222.                  wcount, Bnum, l_set );
  223.           center( tempstr );              
  224.           fprintf( tfile, tempstr );
  225.           fprintf( tfile, "\n\n" );
  226.  
  227.           center( ad );
  228.           fprintf( tfile, ad );
  229.  
  230.           fcloseall();
  231.  
  232.           sprintf( tempstr,
  233.                  "The file %s has %ld %s derived from %s\7.",
  234.                  targetfile, wcount, Bnum, l_set );
  235.           center( tempstr );
  236.           printf( CR CR );
  237.           printf( tempstr );
  238.  
  239. }
  240.  
  241.  
  242.  
  243. void center( char *str )
  244. {
  245.    int padding;
  246.    char st [ LINE_LEN + INCREMENT ];
  247.  
  248.      padding = LINE_LEN / 2 - strlen( str ) / 2;
  249.      memset( st, SPACE, padding );
  250.      *( st + padding ) = NULL;  //Terminate string
  251.      strcat( st, str );
  252.      strcpy( str, st );
  253.  
  254.      return;
  255. }
  256.